/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: XMQ
 * Date: 2022-05-31
 * Time: 15:58
 */
public class TestDemo {
    //finally
    public static int func(int a){
        //就算try块内有return语句也还是要执行finally中的语句
        //不建议在finally语句中写返回语句
        try {
            if(a == 10){
                return a;
            }
        }
        finally {
            return 19;
        }
    }
    public static void main(String[] args) {
        System.out.println(func(10));
    }
    public static void main6(String[] args) {
        try{
//            int[] arr = null;
            int[] arr = {1,2,3};
            System.out.println(arr.length);
        }catch (NullPointerException e){
            e.printStackTrace();
            System.out.println("这是空指针异常");
        }finally {
            System.out.println("finally,这里的代码不管有没有异常抛出，一定会执行");
        }
        System.out.println("qita daimaluoji");
    }
    /**
     * catch可以抛出多个异常，但是不能同时抛出，因为不可能同时发生多个异常
     * 如果多个异常之间存在父子关系,不建议写父类异常例如Exception
     * 子类要在父类的前面抛出
     * @param args
     */
    public static void main5(String[] args) {
        //当抛出的异常和catch不匹配时，会继续往外抛，最后抛到JVM处理
        try{
            int[] array = new int[3];
            System.out.println(array[10]);
        }catch (NullPointerException e){
            System.out.println("这是空指针异常");
        }
        System.out.println("后续代码");
    }
    public static void main4(String[] args) {
        //按照逻辑，try中的代码异常抛出后的代码还是不会被执行
        try{
            int[] arr = null;
            System.out.println(arr.length);
            System.out.println(1);
            System.out.println(1);
            System.out.println(1);
        }catch (NullPointerException | ArithmeticException e){
            e.printStackTrace();
            System.out.println("这是空指针异常或者算术异常");
        }
        System.out.println("qita daimaluoji");
    }
    public static void main3(String[] args) {
        //可以并在一起写，但是也不建议
        try{
            int[] arr = null;
            System.out.println(arr.length);
        }catch (NullPointerException | ArithmeticException e){
            e.printStackTrace();//调用栈信息
            System.out.println("这是空指针异常或者算术异常");
        }
        System.out.println("qita daimaluoji");
    }
    public static void main2(String[] args) {
        try{
            int[] arr = null;
            System.out.println(arr.length);
        }catch (NullPointerException e){
            e.printStackTrace();
            System.out.println("这是空指针异常");
        }catch (ArithmeticException e){
            e.printStackTrace();
            System.out.println("这是算术异常");
        }catch (Exception e){
            System.out.println("这是一个异常");
        }
        System.out.println("qita daimaluoji");
    }
    //try catch
    public static void main1(String[] args) {
        try{
            int[] arr = null;
            System.out.println(arr.length);
        }catch (NullPointerException e){
            e.printStackTrace();
            System.out.println("这是空指针异常");
        }
        System.out.println("qita daimaluoji");
    }
}
